/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pro.dao;

import pro.bean.*;
import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author Cyndi
 */
public class ProyectoDAO extends Dbase {

    public ArrayList<Proyecto> proyectosXUsuario(int idUser) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Proyecto> listaProyectos = new ArrayList<Proyecto>();
        try {


            String sql = "SELECT P.* ";
            sql += " FROM proyectos_x_usuario PU, proyectos P";
            sql += " WHERE P.idproyectos = PU.proyectos_idproyectos AND ";
            sql += " PU.usuario_idusuario = " + idUser;
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);

            Proyecto nuevoProyecto = null;
            while (rs.next()) {
                nuevoProyecto = new Proyecto();
                nuevoProyecto.setIdProyecto(rs.getInt(1));
                nuevoProyecto.setNombre(rs.getString(2));
                nuevoProyecto.setLocal(rs.getString(3));
                nuevoProyecto.setDesc(rs.getString(4));
                nuevoProyecto.getEstado().setIdEstado(rs.getInt(5));
                listaProyectos.add(nuevoProyecto);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaProyectos;
    }
    
    public ArrayList<Proyecto> proyectosXUsuarioXRol(int idUser, String nombreRol) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Proyecto> listaProyectos = new ArrayList<Proyecto>();
        try {

            String sql = "SELECT P.* ";
            sql += " FROM proyectos_x_usuario PU, proyectos P, roles R";
            sql += " WHERE P.idproyectos = PU.proyectos_idproyectos AND ";
            sql += " PU.roles_x_usuario_idroles_x_usuario = R.idroles AND";
            sql += " PU.usuario_idusuario = " + idUser + " AND";
            sql += " R.nombre = '" + nombreRol + "'";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);

            Proyecto nuevoProyecto = null;
            while (rs.next()) {
                nuevoProyecto = new Proyecto();
                nuevoProyecto.setIdProyecto(rs.getInt(1));
                nuevoProyecto.setNombre(rs.getString(2));
                nuevoProyecto.setLocal(rs.getString(3));
                nuevoProyecto.setDesc(rs.getString(4));
                nuevoProyecto.getEstado().setIdEstado(rs.getInt(5));
                listaProyectos.add(nuevoProyecto);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaProyectos;
    }
    
    
    
    
    public ArrayList<Proyecto> proyectosXUsuarioXRol_x(int idUser, int idrol) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Proyecto> listaProyectos = new ArrayList<Proyecto>();
        try {

            String sql ="SELECT P.*   FROM proyectos_x_usuario PU, proyectos  WHERE P.idproyectos = PU.proyectos_idproyectos AND PU.roles_x_usuario_idroles_x_usuario = '"+idrol +"' AND  PU.usuario_idusuario = '"+idUser +"' ";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);

            Proyecto nuevoProyecto = null;
            while (rs.next()) {
                nuevoProyecto = new Proyecto();
                nuevoProyecto.setIdProyecto(rs.getInt(1));
                nuevoProyecto.setNombre(rs.getString(2));
                nuevoProyecto.setLocal(rs.getString(3));
                nuevoProyecto.setDesc(rs.getString(4));
                nuevoProyecto.getEstado().setIdEstado(rs.getInt(5));
                listaProyectos.add(nuevoProyecto);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaProyectos;
    }
    
    
    public String buscarRol(int idProyectoActivo, int idUsuario) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String nombreRol = new String();
        try {

            String sql = "SELECT R.nombre ";
            sql += " FROM proyectos_x_usuario PU, roles R";
            sql += " WHERE PU.roles_x_usuario_idroles_x_usuario = R.idroles AND";
            sql += " PU.usuario_idusuario = " + idUsuario + " AND";
            sql += " PU.roles_x_usuario_idroles_x_usuario = " + idProyectoActivo;
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
                nombreRol = rs.getString(1);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return nombreRol;
    }

    
    
    public int buscarRol_x(int idProyectoActivo, int idUsuario) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        int idRol=0;
        
        try {

            String sql = "SELECT R.nombre ";
            sql += " FROM proyectos_x_usuario PU, roles R";
            sql += " WHERE PU.roles_x_usuario_idroles_x_usuario = R.idroles AND";
            sql += " PU.usuario_idusuario = " + idUsuario + " AND";
            sql += " PU.proyectos_idproyectos= " + idProyectoActivo;
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                idRol = rs.getInt(1);
                
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return idRol;
    }

    
    
    
    
    
    
    
//    public ArrayList<Proyecto> proyectosXUsuario(Integer idProyecto) throws SQLException {
//        this.init_mysql();
//        PreparedStatement pstmt = null;
//        ResultSet rs = null;
//        ArrayList<Proyecto> listaProyectos = new ArrayList<Proyecto>();
//        try {
//
//            pstmt = conn.prepareStatement("SELECT idproyectos,nombre,localidad,descripcion,estado_idestado FROM proyectos"
//                    + " WHERE idproyectos in (select proyectos_idproyectos from proyectos_x_usuario where proyectos_idproyectos=" + idProyecto
//                    + " )ORDER BY 2;");
//
//            rs = pstmt.executeQuery();
//            Proyecto nuevoProyecto = null;
//            while (rs.next()) {
//                nuevoProyecto = new Proyecto();
//                nuevoProyecto.setIdProyecto(rs.getInt(1));
//                nuevoProyecto.setNombre(rs.getString(2));
//                nuevoProyecto.setLocal(rs.getString(3));
//                nuevoProyecto.setDesc(rs.getString(4));
//                nuevoProyecto.getEstado().setIdEstado(rs.getInt(5));
//                listaProyectos.add(nuevoProyecto);
//            }
//        } finally {
//            if (rs != null) {
//                rs.close();
//                rs = null;
//            }
//            if (pstmt != null) {
//                pstmt.close();
//                pstmt = null;
//            }
//            if (conn != null) {
//                conn.close();
//                conn = null;
//            }
//        }
//        return listaProyectos;
//    }

    public Proyecto obtenerProyecto(Integer idProyecto) throws SQLException {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Proyecto proyecto = null;
        try {

            String sql = "SELECT idproyectos,nombre,localidad,descripcion,estado_idestado"
                    + " FROM proyectos where idproyectos=?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, idProyecto);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                proyecto = new Proyecto();
                proyecto.setIdProyecto(rs.getInt(1));
                proyecto.setNombre(rs.getString(2));
                proyecto.setLocal(rs.getString(3));
                proyecto.setDesc(rs.getString(4));
                proyecto.getEstado().setIdEstado(rs.getInt(5));
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return proyecto;
    }

    public void registrarProyecto(Proyecto proyecto) throws SQLException {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb");
            conn.setAutoCommit(false);
            String sql = "insert into proyectos"
                    + " (idproyectos,nombre,localidad,descripcion,estado_idestado)"
                    + " values (?,?,?,?,?,?,?,?,?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, nuevoId());
            pstmt.setString(2, proyecto.getNombre());
            pstmt.setString(3, proyecto.getLocal());
            pstmt.setString(4, proyecto.getDesc());
            pstmt.setInt(5, proyecto.getEstado().getIdEstado());
            pstmt.executeUpdate();
            conn.commit();
        } finally {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
    }

    public void ingresarUsuario(Integer idP, Integer idU, Integer idR) throws SQLException {
        this.init_mysql();
        PreparedStatement pstmt = null;
        try {
            conn.setAutoCommit(false);
            String sql = "INSERT INTO proyectos_x_usuario"
                    + " ( proyectos_idproyectos,"
                    + " usuario_idusuario,roles_x_usuario_idroles_x_usuario)"
                    + " values (?,?,?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, (int) idP);
            pstmt.setInt(2, (int) idU);
            pstmt.setInt(3, (int) idR);
            pstmt.executeUpdate();
            conn.commit();
        } 
        catch(SQLException ex){
            ex.printStackTrace();
        }
        finally {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
    }

    public Integer nuevoId() throws SQLException {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Integer nuevoId = null;
        try {

            conn.setAutoCommit(false);
            String sql = "SELECT (CASE WHEN max(idproyectos) IS NULL THEN 0 ELSE max(idproyectos) END) + 1 FROM proyectos";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();

            if (rs.next()) {
                nuevoId = rs.getInt(1);
                nuevoId = nuevoId == null ? 1 : nuevoId;
            }
        } finally {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }

        }
        return nuevoId;
    }

    public int nuevoIdX() throws SQLException {
        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Integer nuevoIdx = null;
        try {

            String sql = "SELECT (CASE WHEN max(idproyectos_x_usuario) IS NULL THEN 0 ELSE max(idproyectos_x_usuario) END) + 1 FROM proyectos_x_usuario";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
                nuevoIdx = rs.getInt(1);
                nuevoIdx = (nuevoIdx == null) ? 1 : nuevoIdx;
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return nuevoIdx;
    }
}
